package org.example.gxpt.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Delete;
import org.example.gxpt.common.constant.JwtClaimsConstant;
import org.example.gxpt.common.constant.RoleConstant;
import org.example.gxpt.common.properties.JwtProperties;
import org.example.gxpt.common.result.PageResult;
import org.example.gxpt.common.result.Result;
import org.example.gxpt.common.utils.JwtUtil;
import org.example.gxpt.pojo.dto.LoginDTO;
import org.example.gxpt.pojo.dto.ShowroomAdminDTO;
import org.example.gxpt.pojo.dto.ShowroomAdminPageQueryDTO;
import org.example.gxpt.pojo.dto.ShowroomAdminUpdateDTO;
import org.example.gxpt.pojo.entity.ShowroomAdmin;
import org.example.gxpt.pojo.vo.ShowroomAdminLoginVO;
import org.example.gxpt.pojo.vo.ShowroomAdminQueryVO;
import org.example.gxpt.service.ShowroomAdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/showroomAdmin")
@Slf4j
@Api(tags = "展厅管理员相关接口")
@CrossOrigin
public class ShowroomAdminController {

    @Autowired
    private ShowroomAdminService showroomAdminService;

    @PostMapping("/login")
    @ApiOperation("展厅管理员登陆")
    public Result<ShowroomAdminLoginVO> showroomAdminLogin(@RequestBody LoginDTO loginDTO){
        return Result.success(showroomAdminService.login(loginDTO));
    }

    /**
     * 展厅管理员注册
     * @param showroomAdminDTO
     * @return
     */
    @PostMapping("/register")
    @ApiOperation("展厅管理员注册")
    public Result showroomAdminRegister(@RequestBody ShowroomAdminDTO showroomAdminDTO){

        showroomAdminService.save(showroomAdminDTO);
        return Result.success();
    }

    /**
     * 展厅管理员数据更新
     * @param showroomAdminUpdateDTO
     * @return
     */
    @PutMapping("/updateById")
    @ApiOperation("根据id进行展厅管理员数据更新")
    public Result updateShowroomAdmin(@RequestBody ShowroomAdminUpdateDTO showroomAdminUpdateDTO){

        showroomAdminService.updateById(showroomAdminUpdateDTO);
        return Result.success();
    }

    @GetMapping("/listAll")
    @ApiOperation("查询所有展厅管理员")
    public Result<List<ShowroomAdminQueryVO>> listAll(){
        return Result.success(showroomAdminService.listAll());
    }


    @DeleteMapping("/{id}")
    @ApiOperation("根据id删除展厅管理员")
    public Result deleteShowroomAdmin(@PathVariable Long id){
        showroomAdminService.deleteById(id);
        return Result.success();
    }

    @GetMapping("/{id}")
    @ApiOperation("根据id查询展厅管理员")
    public Result<ShowroomAdmin> getShowroomAdminById(@PathVariable Integer id){
        return Result.success(showroomAdminService.getShowroomAdminById(id));
    }

    @PutMapping("/updateByContext")
    @ApiOperation("修改当前登录用户的数据")
    public Result updateShowroomAdminByContext(@RequestBody ShowroomAdminUpdateDTO showroomAdminUpdateDTO){
        showroomAdminService.updateByContext(showroomAdminUpdateDTO);
        return Result.success();
    }

    @GetMapping("/page")
    @ApiOperation("展厅管理员数据分页查询")
    public Result<PageResult> pageShowroomAdmin(ShowroomAdminPageQueryDTO showroomAdminPageQueryDTO){
        return Result.success(showroomAdminService.pageQuery(showroomAdminPageQueryDTO));
    }

    @PutMapping("/updateStatus")
    @ApiOperation("展厅管理员状态更新")
    public Result updateStatus(@RequestParam Long id, @RequestParam Integer status){
        showroomAdminService.updateStatus(id, status);
        return Result.success();
    }

    @GetMapping("/logout")
    @ApiOperation("展厅管理员退出登陆")
    public Result logout(){
        return showroomAdminService.logout();
    }

    //todo 展厅管理员注册：同时添加展厅管理员和展厅信息
    //todo 展厅管理员添加自己展厅的展厅管理员
    //todo 展厅管理员添加自己展厅的设备管理员
    //todo 展厅管理员修改自己展厅的展厅管理员
    //todo 展厅管理员修改自己展厅的设备管理员
    //todo 展厅管理员删除自己展厅的设备管理员
    //todo 展厅管理员操作自己展厅的设备
    //todo 设备管理员查看自己管理的设备

}
